/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LogicaNegocio.Controlador;

import AccesoDatos.Persistencia.Manager.ManagerArea;
import AccesoDatos.Persistencia.Manager.ManagerInformes;
import GUI.Bibliotecario.AdminAreas.PanelRegistrarArea;
import LogicaNegocio.Biblioteca.Area;
import LogicaNegocio.Validacion.VBiblioteca;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityExistsException;
import javax.persistence.RollbackException;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 * Esta clase en java permite el control de eventos
 * para el registro de areas de conocimiento en el sistema.
 *
 * @author sebaxtian
 * Archivo: ControlRegistrarArea.java
 * @version 1.0
 * Fecha: mar may 11 01:54:57 COT 2010
 */



public class ControlRegistrarArea {

    //Atributos de clase
    private PanelRegistrarArea panelRegistrar;
    private ManagerArea gestorArea;
    private ManagerInformes gestorInformes;
    private Area areaConocimiento;


    public ControlRegistrarArea(PanelRegistrarArea panelRegistrar) {
        this.panelRegistrar = panelRegistrar;
        gestorArea = new ManagerArea();
        gestorInformes = new ManagerInformes();
        
    }

    public void registrar() {
        try {
            //crea el area de conocimiento
            areaConocimiento = new Area();
            areaConocimiento.setCodigoArea(Integer.parseInt(panelRegistrar.textFieldCodigo.getText()));
            areaConocimiento.setCodigoAreaPadre(obtenerCodigoAreaPadre());
            areaConocimiento.setNombre(panelRegistrar.textFieldNombre.getText());
            areaConocimiento.setDescripcion(panelRegistrar.textAreaDescripcion.getText());
            //valida los datos
            new VBiblioteca(areaConocimiento);
            //si los datos son correctos
            gestorArea.crearArea(areaConocimiento);
            //si no ocurren excepciones
            limpiar();
            //informar
            JOptionPane.showMessageDialog(panelRegistrar, "El area de conocimiento ha sido creada con exito", "Registrar", JOptionPane.PLAIN_MESSAGE);
        } catch(NumberFormatException ex) {
            JOptionPane.showMessageDialog(panelRegistrar, "El codigo de area solo permite caracteres numericos", "Error Codigo", JOptionPane.ERROR_MESSAGE);
        } catch (EntityExistsException ex) {
            JOptionPane.showMessageDialog(panelRegistrar, "Ya existe un area de conocimiento con codigo "+areaConocimiento.getCodigoArea(), "Error Codigo", JOptionPane.INFORMATION_MESSAGE);
        } catch (RollbackException ex) {
            JOptionPane.showMessageDialog(panelRegistrar, "Ya existe un area de conocimiento con codigo "+areaConocimiento.getCodigoArea(), "Error Codigo", JOptionPane.INFORMATION_MESSAGE);
        } catch (VBiblioteca ex) {
            JOptionPane.showMessageDialog(panelRegistrar, ex.getMessage(), "Error Datos", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void actualizarTablaAreas() {
        List<Area> listaAreas = new ArrayList<Area>();
        listaAreas = gestorInformes.obtenerListaAreas();
        Area area;
        for(int i = 0; i < listaAreas.size(); i++){
            if(panelRegistrar.tablaAreaPadre.getRowCount() <= i){
                DefaultTableModel tmp = (DefaultTableModel)panelRegistrar.tablaAreaPadre.getModel();
                Object fila[] = {"",""};
                tmp.addRow(fila);
            }
            area = listaAreas.get(i);
            panelRegistrar.tablaAreaPadre.setValueAt(area.getCodigoArea(), i, 0);
            panelRegistrar.tablaAreaPadre.setValueAt(area.getNombre(), i, 1);
        }
    }

    private int obtenerCodigoAreaPadre() {
        int codigoArea = areaConocimiento.getCodigoArea();
        int fila = panelRegistrar.tablaAreaPadre.getSelectedRow();
        if(fila != -1){
            codigoArea = Integer.parseInt(panelRegistrar.tablaAreaPadre.getValueAt(fila, 0).toString());
        }
        return codigoArea;
    }

    private void limpiar() {
        panelRegistrar.textFieldCodigo.setText("");
        panelRegistrar.textFieldNombre.setText("");
        panelRegistrar.textAreaDescripcion.setText("");
    }
}
